﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Collections;
using DTO;
namespace DAO
{
    public class CQUIDINHDAO : AbstractDao
    {
        public static CQUIDINHDTO LayThongTinQuiDinh(string moTa)
        {
            CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH where MoTa=" + "'" + moTa + "'";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
            }
            myReader.Close();
            cn.Close();
            return quidinhDto;
        }
        //Lấy thông tin 1 qui định bất kỳ
        public static CQUIDINHDTO LayThongTinQuiDinh(int MaQuiDinh)
        {
            CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH where MaQuiDinh=" + MaQuiDinh.ToString();
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
            }
            myReader.Close();
            cn.Close();
            return quidinhDto;
        }
        // Hàm lấy danh sách các qui định
        public static List<CQUIDINHDTO> LayDanhSachQuiDinh()
        {
            List<CQUIDINHDTO> ds = new List<CQUIDINHDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
                ds.Add(quidinhDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }
        //// Hàm lấy danh sách các qui định đã duyệt
        public static List<CQUIDINHDTO> LayDanhSachQuiDinhDaDuyet()
        {
            List<CQUIDINHDTO> ds = new List<CQUIDINHDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH where Duyet=true";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
                ds.Add(quidinhDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }
        //// Hàm lấy danh sách các qui định chưa duyệt
        public static List<CQUIDINHDTO> LayDanhSachQuiDinhChuaDuyet()
        {
            List<CQUIDINHDTO> ds = new List<CQUIDINHDTO>();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH where Duyet=false";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
                ds.Add(quidinhDto);
            }
            myReader.Close();
            cn.Close();
            return ds;
        }

        ///*Hàm lấy toàn bộ qui định trong csdl đổ vào 1 bảng chỉ hiện ra trên giao diện nhưng không dùg xử lý được*/
        public static DataTable LayBang()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CQUIDINHDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select * From QUIDINH";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        ////lấy 1 số thông tin của tất cả qui định
        ////đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        public static DataTable LayBangQuiDinh()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CQUIDINHDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select HeSo,MoTa,Duyet From QUIDINH";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        ////Lấy ra một số thông tin các qui định đã duyệt
        public static DataTable LayBangQuiDinhDaDuyet()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CQUIDINHDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select HeSo,MoTa,Duyet From QUIDINH where Duyet=true";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }
        ////Lấy ra một số thông tin các qui định chưa duyệt
        public static DataTable LayBangQuiDinhChuaDuyet()
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CQUIDINHDAO.ConnectionData();
            //B3: Tao chuoi strSQL thao tac CSDL
            String strSQL;
            strSQL = "Select HeSo,MoTa,Duyet From QUIDINH where Duyet=false";
            //B4: Thuc thi chuoi strSQL
            OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
            da.Fill(dt);
            //B5: Dong ket noi CSDL
            cn.Close();
            return dt;
        }

        //// Hàm thêm 1 qui định
        public void ThemQuiDinh(CQUIDINHDTO quidinhDto)
        {
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Insert into QUIDINH(HeSo,MoTa,Duyet) values (?,?,?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);

            cmd.Parameters.Add("@HeSo", OleDbType.Double);
            cmd.Parameters.Add("@MoTa", OleDbType.WChar);
            cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
            cmd.Parameters[0].Value = quidinhDto.HeSo;
            cmd.Parameters[1].Value = quidinhDto.MoTa;
            cmd.Parameters[2].Value = quidinhDto.Duyet;

            cmd.ExecuteNonQuery();
            //strSQL = "Select @@IDENTITY";
            ////cmd = new OleDbCommand(strSQL, cn);
            ////lndDto.MaLoaiNguoiDung = (int)cmd.ExecuteScalar();
            cn.Close();
        }
        ////Hàm xóa vĩnh viễn 1 qui định
        public static void XoaQuiDinh(int MaQuiDinh)
        {
            //Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            OleDbConnection cn;
            cn = CQUIDINHDAO.ConnectionData();
            // chuoi strSQL thao tac CSDL
            String strSQL = "DELETE FROM QUIDINH WHERE MaQuiDinh=?";
            //B4: Thuc thi chuoi strSQL
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            //add vao cmd để tránh bị sai sót khi gán thuộc tính bằng 1 giá trị cụ thể
            cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
            cmd.Parameters[0].Value = MaQuiDinh;
            cmd.ExecuteNonQuery();
            //đóng kết nối
            cn.Close();
        }
        /////*Hàm cập nhật đầy đủ thông tin 1 qui định
        ////public void CapNhatThongTinQuiDinh(CQUIDINHDTO quidinhDto)
        ////{
        ////    OleDbConnection cn;
        ////    cn = CQUIDINHDAO.ConnectionData();
        ////    String strSQL = "UPDATE QUIDINH SET HeSo=?,MoTa=?,Duyet=? WHERE  (MaQuiDinh = ?)";
        ////    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        ////    cmd.Parameters.Add("@HeSo", OleDbType.Double);
        ////    cmd.Parameters.Add("@MoTa", OleDbType.WChar);
        ////    cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
        ////    cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
        ////    cmd.Parameters[0].Value = quidinhDto.HeSo;
        ////    cmd.Parameters[1].Value = quidinhDto.MoTa;
        ////    cmd.Parameters[2].Value = quidinhDto.Duyet;
        ////    cmd.Parameters[3].Value = quidinhDto.MaQuiDinh;
        ////    cmd.ExecuteNonQuery();
        ////    cn.Close();
        ////}    
        ////Hàm cập nhật 1 số thông tin của qui đinhj
        public void CapNhatThongTinQuiDinh(CQUIDINHDTO quidinhDto)
        {
            OleDbConnection cn;
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "UPDATE QUIDINH SET HeSo=?,MoTa=? WHERE  (MaQuiDinh = ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@HeSo", OleDbType.Double);
            cmd.Parameters.Add("@MoTa", OleDbType.WChar);
            cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
            cmd.Parameters[0].Value = quidinhDto.HeSo;
            cmd.Parameters[1].Value = quidinhDto.MoTa;
            cmd.Parameters[2].Value = quidinhDto.MaQuiDinh;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        ////Hàm duyệt qui định
        public static void DuyetQuiDinh(int MaQuiDinh, bool Duyet)
        {
            OleDbConnection cn;
            cn = CQUIDINHDAO.ConnectionData();
            string strSQL = "UPDATE QUIDINH SET Duyet=? WHERE (MaQuiDinh=?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@Duyet", OleDbType.Boolean);
            cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
            cmd.Parameters[0].Value = Duyet;
            cmd.Parameters[1].Value = MaQuiDinh;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        public static CQUIDINHDTO LayThongTinQuiDinhTheoMoTa(string moTa)
        {
            CQUIDINHDTO quidinhDto = new CQUIDINHDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "Select * From QUIDINH where MoTa=" + "'" + moTa + "'";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                quidinhDto.MaQuiDinh = int.Parse(myReader[0].ToString());
                quidinhDto.HeSo = double.Parse(myReader[1].ToString());
                quidinhDto.MoTa = myReader[2].ToString();
                quidinhDto.Duyet = bool.Parse(myReader[3].ToString());
                quidinhDto.HeSoMoi = double.Parse(myReader[4].ToString());
            }
            myReader.Close();
            cn.Close();
            return quidinhDto;
        }
        //nguyên
        //Hàm cập nhật 1 số thông tin của qui đinhj
        public void CapNhatQuiDinhHeSoMoi(CQUIDINHDTO quiDinh)
        {
            OleDbConnection cn;
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "UPDATE QUIDINH SET HeSoMoi=?,Duyet=? WHERE  (MaQuiDinh = ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@HeSoMoi", OleDbType.Double);
            cmd.Parameters.Add("@Duyet",OleDbType.Boolean);
            cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
            cmd.Parameters[0].Value = quiDinh.HeSoMoi;
            cmd.Parameters[1].Value = quiDinh.Duyet;
            cmd.Parameters[2].Value = quiDinh.MaQuiDinh;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        ///Ấn
        //hàm cập nhật hệ số
        public void CapNhatHeSoQuiDinh(int MaQuiDinh, Double heso)
        {
            OleDbConnection cn;
            cn = CQUIDINHDAO.ConnectionData();
            String strSQL = "UPDATE QUIDINH SET HeSo =?  WHERE  (MaQuiDinh = ?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);

            cmd.Parameters.Add("@HeSo", OleDbType.Double);
            cmd.Parameters.Add("@MaQuiDinh", OleDbType.Integer);
            cmd.Parameters[0].Value = heso;
            cmd.Parameters[1].Value = MaQuiDinh;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
    }
}
